#冒泡排序的精髓是经行数据两两比较，以便在每一次排序时找到最大的那个数，经过若干次比较完成排序


def bubble_sort(alist):
    for i in range(len(alist)-1):
        for j in range(len(alist)-i-1):               #这一步是最容易出问题的，range()这个函数里面的数值就代表有多少个数字,而我前面考的n-1次已经考虑到j与j+1比较
            if alist[j] > alist[j+1]:
                alist[j+1],alist[j] = alist[j],alist[j+1]
    return alist
print(bubble_sort([5,8,4,3,2,1]))

#冒泡排序也有一种比较好的改进，即，如果在一次比较中，如果没有发生交换，这就意味着整个列表就已经是排好序的了
#但是想要注意到这一步你就得注意到冒泡排序在确定最终位置前必须交换元素

#升级版的冒泡排序
def upgrade_bubble_sort(alist):
    exchange = True
    passnum = len(alist) -1
    while passnum > 0 and exchange:
        exchange = False
        for j in range(passnum):  # 这一步是最容易出问题的，range()这个函数里面的数值就代表有多少个数字,而我前面考的n-1次已经考虑到j与j+1比较
            if alist[j] > alist[j + 1]:
                alist[j + 1], alist[j] = alist[j], alist[j + 1]
                exchange = True
        passnum -=1

    return alist

print(upgrade_bubble_sort([1,3,5,7,9,2,4,6,8,10]))

